import socket

##
# netAdapter
# quebra e reagrupa mensagens
#
class NetAdapter:
 
    ##
    # Construtor
    # inicializa as constantes
    def __init__(self):  
        self.TAMMAX = 1024
        print '>  NetAdapter: inicializado'

    
    ##
    # conecta
    # recebe um ip e uma porta e inicia um socket
    # constantes inicializadas aqui
    # @param host ip/nome do servidor
    # @param port porta de conexao
    def conecta(self,host,port):
        self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        self.host = host
        self.port = port
        self.socket.connect((self.host, self.port))
        print '>  NetAdapter: Conectado host: '+self.host+' port: '+str(self.port)

    ##
    # conecta
    # recebe um ip e uma porta e inicia um socket
    # constantes inicializadas aqui
    # @param socket socket de conexao
    # @param host tupla de host + porta do cliente
    def setConexao(self, socket, host):
        self.socket = socket
        self.host = host[0]
        self.port = host[1]
        print '>  NetAdapter: conectado host: '+self.host+' port: '+str(self.port)    
        
    ##
    # envia
    # pega o texto e quebra em blocos de tamanho fixo para envio
    # @param texto texto a ser enviado
    # OBS: a mensagem nao eh quebrada para podermos fazer o teste utilizando telnet
    def envia(self, texto):
        #nbPacotes = len(texto)/self.TAMMAX + (len(texto)%self.TAMMAX != 0)
        nbPacotes = 1
        inicio = 0
        #self.socket.send(str(nbPacotes))
        for i in range(0,nbPacotes):
            self.socket.send(texto[inicio:inicio+self.TAMMAX])
            inicio = inicio+self.TAMMAX

    ##
    # recebe
    # recebe uma mensagem, remonta e devolve
    # @return retorna a mensagem jah remontada
    # OBS: a mensagem nao eh quebrada para podermos fazer o teste utilizando telnet
    def recebe(self):
        #nbPacotes = int(self.socket.recv(128))
        nbPacotes = 1
        buffer = ''
        for i in range(0,nbPacotes):
            temp = self.socket.recv(self.TAMMAX)
            buffer += temp
        return buffer    

    ##
    # desconecta
    # fecha o socket
    def desconecta(self):
        self.socket.close()
        print '>  NetAdapter: conexao fechada' 
            

